// app.js - 应用实例的增强功能

// 初始化全局数据
const initGlobalData = () => {
  try {
    const app = getApp();
    if (app) {
      // 确保app.globalData存在
      if (!app.globalData) {
        console.log('初始化globalData');
        app.globalData = {
          userInfo: null,
          hasLogin: false,
          isUniApp: true,
          scenic: null,
          searchKeyword: '',
          lastLocation: {
            latitude: 39.908823,
            longitude: 116.397470
          }
        };
      }
      return app.globalData;
    } else {
      console.log('getApp()返回null，创建临时globalData');
      // 返回一个临时的globalData
      return {
        userInfo: null,
        hasLogin: false,
        isUniApp: true,
        scenic: null,
        searchKeyword: '',
        lastLocation: {
          latitude: 39.908823,
          longitude: 116.397470
        }
      };
    }
  } catch (e) {
    console.error('初始化globalData时出错:', e);
    // 出错时返回默认对象
    return {
      userInfo: null,
      hasLogin: false,
      isUniApp: true,
      scenic: null,
      searchKeyword: '',
      lastLocation: {
        latitude: 39.908823,
        longitude: 116.397470
      }
    };
  }
};

// 安全地获取全局数据
const getGlobalData = () => {
  try {
    const app = getApp();
    return app && app.globalData ? app.globalData : initGlobalData();
  } catch (e) {
    console.error('获取globalData时出错:', e);
    return initGlobalData();
  }
};

// 安全地设置全局数据
const setGlobalData = (key, value) => {
  try {
    const app = getApp();
    if (app) {
      if (!app.globalData) {
        app.globalData = initGlobalData();
      }
      app.globalData[key] = value;
      console.log(`全局${key}已更新:`, value);
      return true;
    } else {
      console.error('无法设置全局数据: getApp()返回null');
      return false;
    }
  } catch (e) {
    console.error(`设置globalData.${key}时出错:`, e);
    return false;
  }
};

// 确保Vue实例已准备好
const ensureVueReady = () => {
  return new Promise((resolve) => {
    const checkApp = () => {
      try {
        const app = getApp();
        if (app && app.$vm) {
          resolve(app);
        } else {
          setTimeout(checkApp, 100);
        }
      } catch (e) {
        setTimeout(checkApp, 100);
      }
    };
    checkApp();
  });
};

// 使用原型增强Vue实例
ensureVueReady().then((app) => {
  // 增强导航功能
  const enhanceNavigation = () => {
    try {
      if (uni && uni.navigateTo) {
        // 备份原始方法
        const originalNavigateTo = uni.navigateTo;
        
        // 增强navigateTo方法
        uni.navigateTo = function(options) {
          console.log('增强navigateTo:', options);
          
          // 处理特殊页面
          if (options.url.includes('pages/guide/search')) {
            console.log('处理搜索页面导航');
            
            // 尝试多种路径格式
            const tryNavigate = (paths) => {
              if (paths.length === 0) {
                // 所有路径都尝试失败，回退到原始方法
                console.log('所有路径尝试失败，使用原始方法');
                return originalNavigateTo(options);
              }
              
              const currentPath = paths.shift();
              const newOptions = {
                ...options,
                url: currentPath
              };
              
              console.log('尝试路径:', currentPath);
              originalNavigateTo({
                ...newOptions,
                fail: (err) => {
                  console.error('导航失败，尝试下一个路径:', err);
                  tryNavigate(paths);
                },
                success: options.success,
                complete: options.complete
              });
            };
            
            // 尝试多种可能的路径格式
            tryNavigate([
              options.url,
              '/pages/guide/search',
              'pages/guide/search',
              '../guide/search',
              './guide/search',
              '/pages/guide/search.vue',
              'pages/guide/search.vue'
            ]);
            
            return;
          }
          
          // 对于其他页面，使用原始方法
          return originalNavigateTo(options);
        };
        
        console.log('导航功能增强完成');
      } else {
        console.error('uni或uni.navigateTo不可用');
      }
    } catch (e) {
      console.error('增强导航功能时出错:', e);
    }
  };
  
  // 执行导航增强
  enhanceNavigation();
  
  // 确保globalData初始化
  initGlobalData();
  
  console.log('Vue实例增强完成');
}).catch(e => {
  console.error('Vue实例增强失败:', e);
});

// 导出工具函数
export {
  getGlobalData,
  setGlobalData,
  initGlobalData
};

console.log('app.js 加载完成'); 